#include<bits/stdc++.h>
using namespace std;
inline long long read(){
	long long ret=0,neg=1;
	char ch;
	ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
	if(ch=='-'){
		neg=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		ret=(ret<<1)+(ret<<3)+(ch^48);
		ch=getchar();
	}
	return ret*neg;
}
void write(long long x){
	if(x<0) putchar('-'),x=-x;
	if(x>=10) write(x/10);
	putchar('0'+x%10);
}

int S,T;
long long buc[310];
namespace Primagen{
	const int _=200010;
	int Fir[610],Nxt[_],To[_],C[_];
	long long W[_];
	int idx=1;
	// inline void Reset(){
	// 	idx=1;
	// 	memset(Fir,0,sizeof(Fir));
	// }
	inline void Add_Edge(int u,int v,int c,long long w){
		// cout<<"!!"<<u<<' '<<v<<' '<<c<<' '<<w<<endl;
		++idx;
		Nxt[idx]=Fir[u];
		Fir[u]=idx;
		To[idx]=v;
		C[idx]=c;
		W[idx]=w;
		++idx;
		Nxt[idx]=Fir[v];
		Fir[v]=idx;
		To[idx]=u;
		C[idx]=0;
		W[idx]=-w;
	}
	long long dis[610];
	int prev[610];
	inline bool spfa(){
		for(int i=0;i<=605;++i){
			dis[i]=100000000000000000ll;
			prev[i]=-1;
		}
		dis[S]=0;
		queue<int> q;
		q.push(S);
		while(q.empty()==false){
			int u=q.front();
			q.pop();
			// cout<<u<<endl;
			for(int i=Fir[u];i;i=Nxt[i]){
				int v=To[i];
				if(C[i]==0) continue;
				if(dis[v]>dis[u]+W[i]){
					dis[v]=dis[u]+W[i];
					prev[v]=i;
					q.push(v);
				}
			}
		}
		return dis[T]<100000000000000000ll;
	}
	inline long long Solve(){
		long long ret=0;
		int lst=0;
		memset(buc,0x3f,sizeof(buc));
		buc[0]=0;
		while(spfa()){
			long long del=1000;
			long long sum=0;
			int cur=T;
			while(cur!=S){
				del=min(del,(long long)C[prev[cur]]);
				sum+=W[prev[cur]];
				cur=To[prev[cur]^1];
				// cout<<"???"<<cur<<endl;
			}
			// cout<<del<<' '<<sum<<"??\n";
			ret+=1ll*del*sum;
			cur=T;
			while(cur!=S){
				C[prev[cur]]-=del;
				C[prev[cur]^1]+=del;
				cur=To[prev[cur]^1];
			}
			while(del){
				--del;
				++lst;
				buc[lst]=buc[lst-1]+sum;
			}
		}
		return ret;
	}
}

int n,m,q;
long long f[310][310];

int main(){
	freopen("journey.in","r",stdin);
	freopen("journey.out","w",stdout);
	n=read();
	m=read();
	q=read();
	memset(f,0x3f,sizeof(f));
	for(int i=1;i<=m;++i){
		long long u,v,w;
		u=read();
		v=read();
		w=read();
		f[u][v]=min(f[u][v],w);
	}
	for(int i=1;i<=n;++i) f[i][i]=0;
	for(int k=1;k<=n;++k){
		for(int i=1;i<=n;++i){
			for(int j=1;j<=n;++j){
				f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
			}
		}
	}
	S=603,T=604;
	for(int i=1;i<=n;++i){
		Primagen::Add_Edge(S,i,1,0);
		Primagen::Add_Edge(i+n,T,1,0);
		for(int j=1;j<=n;++j){
			if(f[i][j]<=3000010&&j!=i) Primagen::Add_Edge(i,j+n,1,f[i][j]);
		}
	}
	Primagen::Solve();
	while(q--){
		long long vc=read();
		long long ans=100000000000000000ll;
		for(int i=0;i<=n;++i){
			ans=min(ans,1ll*(n-i)*vc+buc[i]);
		}
		write(ans);
		putchar('\n');
	}
	return 0;
}